import {
	getUser
} from '@/api/user'
import {
	getCartNum
} from '@/api/store';
import {
	USER_INFO,
	TOKEN,
	CONFIG
} from '@/config/cachekey';
import Cache from '@/utils/cache'
import wechath5 from '@/utils/wechath5'
import {
	isWeixinClient
} from '@/utils/tools'
import {
	baseURL,
	basePath
} from '@/config/app'

const state = {
	config: Cache.get(CONFIG) || {
		center_setting: {},
		index_setting: {},
		navigation_menu: [],
		navigation_setting: {},
		share: {}
	},
	userInfo: {
		user_money: 0,
		user_integral: 0,
		coupon: 0
	},
	token: Cache.get(TOKEN) || null,
	cartNum: "",
	sysInfo: {},
	communityItem: {},
	outShowPop: false
};

const mutations = {
	login(state, opt) {
		state.token = opt.token;
		Cache.set(TOKEN, opt.token, 59 * 24 * 60 * 60);
		this.dispatch('getUser')
	},
	logout(state) {
		state.token = undefined;
		state.userInfo = {
			user_money: 0,
			user_integral: 0,
			coupon: 0
		}
		Cache.remove(TOKEN);
	},
	setOutShowPop(state, bool) {
		state.outShowPop = bool
	},
	setCartNum(state, num) {
		state.cartNum = num
	},
	setUserInfo(state, user) {
		state.userInfo = user
	},
	setConfig(state, data) {
		state.config = Object.assign(state.config, data)
		Cache.set(CONFIG, state.config);
	},
	setSystemInfo(state, data) {
		state.sysInfo = data
	},
	setCommunity(state, data) {
		state.communityItem = data
	}
};

const actions = {
	getCartNum({
		state,
		commit
	}) {
		return new Promise(resolve => {
			if (!state.token) return uni.removeTabBarBadge({
				index: 3
			})
			getCartNum().then(res => {
				if (res.code == 1) {
					commit('setCartNum', res.data.num)
					if (!res.data.num) return uni.removeTabBarBadge({
						index: 3
					})
					uni.setTabBarBadge({
						index: 3,
						text: String(res.data.num)
					})
					resolve()
				}
			})
		})
	},
	getUser({
		state,
		commit
	}) {
		return new Promise(resolve => {
			getUser().then(res => {
				if (res.code == 1) {
					commit('setUserInfo', res.data)
				}
				resolve()
			})
		})
	},
	getSystemInfo({
		state,
		commit
	}) {
		uni.getSystemInfo({
			success: res => {
				let {
					statusBarHeight,
					platform,
				} = res;
				let navHeight;
				if (platform == 'ios' || platform == 'devtools') {
					navHeight = statusBarHeight + 44;
				} else {
					navHeight = statusBarHeight + 48;
				}
				commit('setSystemInfo', {
					...res,
					navHeight,
				})
			},
			fail(err) {
				console.log(err);
			}
		});
	},
	wxShare({
		state
	}, opt) {
		// #ifdef H5
		const shareInfo = state.config.share
		const inviteCode = state.userInfo.distribution_code
		const href = window.location.href
		const sym = href.includes('?') ? '&' : '?'
		const option = {
			shareTitle: shareInfo.h5_share_title,
			shareLink: inviteCode ? `${href}${sym}invite_code=${inviteCode}` : href,
			shareImage: shareInfo.h5_share_image,
			shareDesc: shareInfo.h5_share_intro
		}
		wechath5.share(Object.assign(option, opt))
		// #endif

	},
	// 分享种草文章
	communityShare({
		state,
		commit
	}) {
		const item = state.communityItem;
		console.log(item)
		// #ifdef H5
		if (isWeixinClient()) {
			const option = {
				shareTitle: `${item.user.nickname}，TA的内容超级棒`,
				shareLink: `${baseURL}${basePath}/${item.url}?id=${item.id}`,
				shareImage: item.image,
				shareDesc: item.content
			}
			wechath5.share(option)
		}
		// #endif
		// #ifdef APP-PLUS
		uni.share({
			provider: "weixin",
			scene: "WXSceneSession",
			type: 0,
			href: `${baseURL}${basePath}/${item.url}?id=${item.id}`,
			title: `${item.user.nickname}，TA的内容超级棒`,
			summary: item.content,
			imageUrl: item.image,
			success: (res) => {
				console.log('分享成功');
			},
			fail: (err) => {
				console.log(err)
				uni.showToast({
					icon: 'none',
					title: err.errMsg
				})
			}
		});
		// #endif
	}
};

export default {
	state,
	mutations,
	actions
};
